home *** CD-ROM | disk | FTP | other *** search
- {
- +---------------------------------------------------------------------+
- | |
- | AskX - (C) 1993 by "Diesel" B. Künnen, written 4 my special |
- | friend Invisible Power - hi Jürgen, die InfoX wird immer |
- | besser ! C U ! |
- | |
- | AskX ist ein Ersatz für C=`s ask-Befehl. Er bietet genau wie |
- | das ARP-Ask eine Otpion zur Auszeit, d.h. es wartet nur eine |
- | vom User definierte Zeit auf einen Tastendruck. [ ARP läuft |
- | ja leider unter OS 2.0 nicht einwandfrei. ] |
- | |
- +---------------------------------------------------------------------+
- }
-
- Program AskX;
-
- {$I "Include:utils/Parameters.i"}
- {$I "Include:utils/stringlib.i"}
- {$I "Include:libraries/dos.i"}
-
- Const
- loop : Short = 0;
-
- Var
- buf1,
- buf2,
- buf3 : String;
- hdl : FileHandle;
- max,
- len,
- val,
- ten,
- i : Integer;
-
-
- Function Taste : Boolean; { Überpfüfen, ob Taste gedrückt }
- Begin
-
- { buf 2 konvertieren }
- for i := 0 to strlen( buf2 )-1 do
- buf2[i] := toupper( buf2[i] );
- { = TIMEOUT ? }
- if strcmp( buf2, "TIMEOUT" )=0 then begin
-
- { buf 3 }
- max := strlen( buf3 ); { Anzahl Ziffern }
- If max>5 then max :=5; { max. 99999 }
- ten := 1;
- val := 0;
- { Ziffer -> Integer }
- for i := max-1 downto 0 do Begin
- If IsDigit( buf3[i] ) then Begin
- val := val + ( Byte(buf3[i]) - Byte('0') ) * ten;
- ten := ten * 10
- End Else i := 0; { Ziffer für Ziffer }
- End;
-
- hdl := DosOutput; { Testen, ob überhaupt }
- If IsInterActive( hdl ) then Begin { CLI-Fenster & keine }
- If WaitForChar( hdl, val*1000000) { Datei, ggf. warten }
- Then Taste := True { Taste -> OK }
- Else Taste := False; { Keine Taste -> KO }
- End;
- End;
- Taste:=True;
- End;
-
-
-
-
-
- Begin
- buf1 := AllocString( 100 ); { Puffer für die Strings holen }
- buf2 := AllocString( 100 );
- buf3 := AllocString( 100 );
-
- GetParam(1, buf1); { CLI-Parameter holen, }
- GetParam(2, buf2); { Sofern vorhanden }
- GetParam(3, buf3);
- { Wenn keine Parameter: }
- If strlen(buf1)=0 then Begin
- writeln("\nAskX 1.0, (C)1993 by Diesel\nUsage : AskX AskString [ timeout secs ]\ny/Y -> OK, n/N -> WARN\n\n");
- Exit(0);
- End;
-
- { buf 1 }
-
- If buf1[1]='"' then Begin { Wenn der Ask-String in }
- { Anf.Zeichen steht, muß }
- { das Ende gesucht werden}
- i := 2;
- len := strlen(buf1);
-
- while i< len do Begin
- if buf1[i] = '"' then Begin { Wenn Ende gefunden, als }
- buf1[i] := chr(0); { solches mit 0-Byte }
- i := len; { terminieren }
- End;
- End;
- End;
-
- Repeat
- inc(loop); { Schleifenzähler }
- Write( buf1 ); { Ask-String setzen }
-
- IF (loop=1) { Nur beim 1. Durchgang }
- AND (strlen(buf2)>0) { ggf. die Zeit abwarten }
- AND (strlen(buf3)>0)
- THEN BEGIN
- If Not Taste then Begin { -Taste- wartet die angegebene }
- Writeln; { Zeit auf eine Meldung des Users }
- Exit(0); { Nix ? Dann Exit(0) }
- End;
- END;
-
- Readln(buf2); { buf2 kann jetzt zum Einlesen }
- buf2[0]:=toUpper(buf2[0]); { verwendet werden : y oder n ? }
- until (buf2[0]='Y') OR (buf2[0]='N'); { Bis y oder n !!!! }
-
- If buf2[0] = 'Y'
- then Exit(0) { Y }
- else Exit(5); { N }
-
- End.
-
-